// /src/api/apiList/bedRecord.js
import axios from 'axios'

// /**
//  * 查询所有床位使用记录（不分页）
//  * @returns {Promise<ResponseBean<BedRecord[]>>}
//  */
// export function listAllBedRecords() {
//     return axios.get('/bedRecord/list')
// }
//
// /**
//  * 分页查询床位使用记录
//  * @param {number} page 页码，默认 1
//  * @param {number} size 每页条数，默认 10
//  * @returns {Promise<ResponseBean<IPage<BedRecord>>>}
//  */
// export function listBedRecordPage(page = 1, size = 10) {
//     return axios.get('/bedRecord/page', { params: { page, size } })
// }
//
// /**
//  * 多条件分页查询床位使用记录
//  * @param {Object} options 查询参数
//  * @param {string} [options.clientName] 客户姓名（模糊）
//  * @param {string} [options.beginTimeStr] 使用开始时间，格式 "yyyy-MM-dd"
//  * @param {string} [options.endTimeStr] 使用结束时间，格式 "yyyy-MM-dd"
//  * @param {number} [options.bedRecordStatus] 使用状态：0 或 1
//  * @param {number} [options.page=1] 页码
//  * @param {number} [options.size=10] 每页条数
//  * @returns {Promise<ResponseBean<IPage<BedRecordWithClient>>>}
//  */
// export function searchBedRecords({
//                                      clientName,
//                                      beginTimeStr,
//                                      endTimeStr,
//                                      bedRecordStatus,
//                                      page = 1,
//                                      size = 10
//                                  } = {}) {
//     return axios.get('/bedRecord/search', {
//         params: { clientName, beginTimeStr, endTimeStr, bedRecordStatus, page, size }
//     })
// }
//
// /**
//  * 根据 ID 查询单条床位使用记录
//  * @param {number|string} id 记录 ID
//  * @returns {Promise<ResponseBean<BedRecord>>}
//  */
// export function getBedRecordById(id) {
//     return axios.get(`/bedRecord/${id}`)
// }
//
// /**
//  * 创建新的床位使用记录
//  * @param {Object} record BedRecord 对象，例如 { clientId, bedId, startTime, endTime, status, … }
//  * @returns {Promise<ResponseBean<void>>}
//  */
// export function createBedRecord(record) {
//     return axios.post('/bedRecord/create', record)
// }
//
// /**
//  * 更新已有的床位使用记录
//  * @param {Object} record BedRecord 对象，必须带 id，例如 { id, clientId, bedId, startTime, endTime, status, … }
//  * @returns {Promise<ResponseBean<void>>}
//  */
// export function updateBedRecord(record) {
//     return axios.put('/bedRecord/update', record)
// }
//
// /**
//  * 删除床位使用记录
//  * @param {number|string} id 记录 ID
//  * @returns {Promise<ResponseBean<void>>}
//  */
// export function deleteBedRecord(id) {
//     return axios.delete(`/bedRecord/delete/${id}`)
// }
// export function swapBed({ oldBedId, newBedId, newBeginTime, newEndTime }) {
//     return axios.post('/bedRecord/swap', null, {
//         params: { oldBedId, newBedId, newBeginTime, newEndTime }
//     })
// }

/**
 * 格式化日期对象为 "yyyy-MM-dd" 字符串
 * @param {Date} date - 日期对象
 * @returns {string|null} - 格式化后的字符串或null
 */
function formatDate(date) {
    if (!date || !(date instanceof Date)) {
        return null;
    }
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    return `${year}-${month}-${day}`;
}


/**
 * 对应后端 /search 接口
 * 分页并按多条件查询床位使用详情列表
 * @param {object} params - 包含所有查询条件的对象
 * @param {string} [params.clientName] - 客户姓名 (模糊)
 * @param {Date} [params.bedBeginTime] - 入住日期 (Date对象)
 * @param {number} params.bedRecordStatus - 使用状态 (1=正在使用, 0=历史记录)
 * @param {number} params.pageNum - 当前页码
 * @param {number} params.pageSize - 每页数量
 * @returns {Promise<IPage<BedRecordWithClient>>}
 */
export function listBedRecords(params) {
    // 构建将要发送给后端的查询参数
    const queryParams = {
        clientName: params.clientName,
        // 后端需要yyyy-MM-dd格式的字符串，所以在这里进行格式化
        beginTimeStr: formatDate(params.bedBeginTime),
        endTimeStr: formatDate(params.bedEndTime),
        bedRecordStatus: params.bedRecordStatus,
        page: params.pageNum,
        size: params.pageSize
    };

    return axios({
        url: '/bedRecord/search', // 匹配 @RequestMapping 和 @GetMapping
        method: 'GET',
        // GET请求的所有参数都通过 `params` 选项发送，axios会自动将其转为URL查询字符串
        params: queryParams
    });
}

/**
 * 对应后端 /update 接口
 * 主要用于修改床位使用的结束时间
 * @param {object} record - 包含 bedRecordId 和 bedEndTime 的对象
 * @returns {Promise<void>}
 */
export function updateBedRecord(record) {
    return axios({
        url: '/bedRecord/update', // 匹配 @RequestMapping 和 @PutMapping
        method: 'PUT',
        // PUT请求，将整个对象作为请求体发送，匹配后端的 @RequestBody
        data: record
    });
}

/**
 * 对应后端 /swap 接口
 * 执行床位调换
 * @param {object} swapData - 包含调换信息的对象
 * @param {number} swapData.oldBedId
 * @param {number} swapData.newBedId
 * @param {string} swapData.newBeginTime - "yyyy-MM-dd HH:mm:ss" 格式
 * @param {string} swapData.newEndTime - "yyyy-MM-dd HH:mm:ss" 格式
 * @returns {Promise<void>}
 */
export function swapBed(swapData) {
    // 后端使用 @RequestParam，所以我们依然使用 `params` 选项来发送数据
    return axios({
        url: '/bedRecord/swap', // 匹配 @RequestMapping 和 @PostMapping
        method: 'POST',
        params: swapData
    });
}
